const fs = require('fs')
const FILE_PATH = './data/books.json'

function findall(callback){
    fs.readFile(FILE_PATH,'utf8',(err,data)=>{
        if(err){
            return callback(err)
        }
        callback(null,JSON.parse(data).books)
    })
}

function findById(id,callback){
    fs.readFile(FILE_PATH,'utf8',(err,data)=>{
        if(err){
            return callback(err)
        }
        data = JSON.parse(data)
        let book = data.books.find(item=>{
            //返回与输入的id相同的对象
            return item.id === id
        })
        //返回对象
        callback(null,book)
    })
}


function add(student,callback){
    fs.readFile(FILE_PATH,'utf8',(err,data)=>{
        if(err){
           return  callback(err)
        }
        data = JSON.parse(data)
        // 获取数据最后一个对象，并且把它的id+1 ，得到一个新的id
        let id = data.books[data.books.length - 1].id + 1
        let s = JSON.parse(book)
        s.id = id
        data.students.push(s)
        // 把新数组，重新写回到文件内
        fs.writeFile(FILE_PATH,JSON.stringify(data),(err)=>{
            if(err){
                return callback(err)
            }
            callback(null)
        })
    })
  }

  function deleteById(id,callback){
    fs.readFile(FILE_PATH,'utf8',(err,data)=>{
        if(err){
           return callback(err)
        }
        data = JSON.parse(data)
        let index = data.books.findIndex(item=>{
            return item.id === id
        })
        data.books.splice(index,1)
      //   把删完之后的数据重写回文件
      fs.writeFile(FILE_PATH,JSON.stringify(data),(err)=>{
          if(err){
              return callback(err)
          }
          callback(null)
      })
    })
}


  function upbooks(books,callback){
    fs.readFile(FILE_PATH,'utf8',(err,data)=>{
        if(err){
           return callback(err)
        }
        // 把传递过过来的字符串，转换成对象
        books = JSON.parse(books)
        books.id=Number(books.id)
        data = JSON.parse(data)
      // 查找指定的对象
        let book = data.books.find(item=>{
            return item.id === books.id
        })
        for (const key in books) {
            book[key] = books[key]
        }
      fs.writeFile(FILE_PATH,JSON.stringify(data),(err)=>{
          if(err){
              return callback(err)
          }
          callback(null)
      })
    })
}
exports.findall = findall
exports.findById = findById
exports.add = add
exports.deleteById = deleteById
exports.upbooks = upbooks
